package com.ce.util;

import java.util.Map;

import com.ce.framework.util.StringUtil;

/**
 * 嫦娥软件有限公司 版权所有 2013
 * 创建人： andy
 * 创建时间： 2013-10-4 下午12:30:31
 * 功能描述：系统字典表，用于获取系统配置信息
 * ==================================
 * 修改历史
 * 修改人        修改时间      修改位置（函数名）
 *
 * ==================================
 */
public class RegeditUtil {
	
	/**
	 * 系统当前段的ID，必须为SYS_T_ORG$MAN表中的主键
	 */
	public static final String SYSTEM_SEG_ID = "SYSTEM_SEG_ID";

	/**
	 * 是否启用数据库更新，布尔值true为启用,false为不启用
	 */
	public static final String SYSTEM_DATABASE_UPDATE = "SYSTEM_DATABASE_UPDATE";

	/**
	 * 系统首页的路径，默认为/login/login.jsp，可以通过配置此项来改变系统首页内容
	 */
	public static final String SYSTEM_INDEX_PATH = "SYSTEM_INDEX_PATH";

	/**
	 * 系统登录时的验证码校验，布尔值true校验，false不校验
	 */
	public static final String SYSTEM_LOGIN_NUMCHECK = "SYSTEM_LOGIN_NUMCHECK";

	/**
	 * 后台主界面的URI，直接配置工程中的JSP路径
	 */
	public static final String SYSTEM_FRAME_URI = "SYSTEM_FRAME_URI";

	/**
	 * 系统是否使用集群，布尔值true表示使用集群,false表示单机环境
	 */
	public static final String SYSTEM_USE_CLUSTER = "SYSTEM_USE_CLUSTER";

	/**
	 * 文件上传下载的方式，值"FTP"表示使用FTP方式，"DISK"表示使用本地磁盘文件系统
	 */
	public static final String FILEUPLOAD_STYLE = "FILEUPLOAD_STYLE";

	/**
	 * 文件上传下载使用FTP方式时的FTP服务器IP地址
	 */
	public static final String FILEUPLOAD_FTP_IP = "FILEUPLOAD_FTP_IP";

	/**
	 * 文件上传下载使用FTP方式时的FTP服务器用户名
	 */
	public static final String FILEUPLOAD_FTP_USER = "FILEUPLOAD_FTP_USER";

	/**
	 * 文件上传下载使用FTP方式时的FTP服务器密码
	 */
	public static final String FILEUPLOAD_FTP_PWD = "FILEUPLOAD_FTP_PWD";

	/**
	 * 文件上传下载使用本地磁盘文件系统时的存放路径，多个路径时以;分隔
	 * 写入文件时直接写入最后的目录，读取文件时从最后目录往前遍历
	 */
	public static final String FILEUPLOAD_DISK_DIR = "FILEUPLOAD_DISK_DIR";

	/**
	 * 系统中上传图片的单文件限制大小，此值为数值型，单位是字节。为0时表示无限制
	 */
	public static final String FILEUPLOAD_IMAGE_MAX_SIZE = "FILEUPLOAD_IMAGE_MAX_SIZE";

	/**
	 * 系统中上传文件的单文件限制大小，此值为数值型，单位是字节。为0时表示无限制
	 */
	public static final String FILEUPLOAD_FILE_MAX_SIZE = "FILEUPLOAD_FILE_MAX_SIZE";

	/**
	 * 系统中每次上传文件的所有文件总大小的限制，此值为数值型，单位是字节。为0时表示无限制
	 */
	public static final String FILEUPLOAD_MAX_SIZE = "FILEUPLOAD_IMAGE_MAX_SIZE";
	
	/** 信息发布中是否使用车间子站点,true表示无车间，false表示有车间，默认为false */
	public static final String INFO_SUB_SITE_NO_CJ = "INFO_SUB_SITE_NO_CJ";
	
	/**
	 * 个人桌面的显示地址，根据项目不同配置不同的个人桌面地址
	 */
	public static final String DSEKTOP_PAGE_URL = "DSEKTOP_PAGE_URL";
	
	/**
	 * 需要Session同步的子工程名，以,号分隔
	 */
	public static final String SESSION_CREATE_PROJECT_NAME = "SESSION_CREATE_PROJECT_NAME";
	
	/**
	 * 用于控制列表页的显示条数
	 */
	public static final String SYSTEM_PAGE_LIST = "SYSTEM_PAGE_LIST";

	@SuppressWarnings("unchecked")
	public static Map<String,String> getRegeditCache(){
		Map<?, ?> map = CacheUtil.getCacheMap(CacheUtil.REGEDIT_CACHE);
		return (Map<String,String>)map;
	}
	
	/**
	 * 开发人： andy
	 * 开发时间： 2013-10-4 下午12:30:53
	 * 功能描述：根据模块名称获取系统字典表的对应值（字符串型）
	 * 方法的参数和返回值
	 * @param vcName
	 * @return
	 * String 
	 * ==================================
	 * 修改历史
	 * 修改人        修改时间      修改原因及内容
	 *
	 * ==================================
	 */
	public static String getRegeditStringValue(String vcName){
		Map<String,String> map = getRegeditCache();
		String value = map.get(vcName);
		if(value!=null)return value;
		String sql = "select vc_value from sys_t_regedit t where t.vc_del$flag=0 and t.vc_name='"+vcName+"'";
		value = DbUtil.getFirstStringSqlQuery(sql);
		if(value==null)
			value = "";
		map.put(vcName, value);
		return value;
	}

	public static String getRegeditStringValue(String vcName,String defaul){
		String value = getRegeditStringValue(vcName);
		if(StringUtil.isBlank(value)){
			return defaul;
		}
		return value;
	}

	/**
	 * 开发人： andy
	 * 开发时间： 2013-10-4 下午12:30:53
	 * 功能描述：根据模块名称获取系统字典表的对应值（整型）
	 * 方法的参数和返回值
	 * @param vcName
	 * @return
	 * String 
	 * ==================================
	 * 修改历史
	 * 修改人        修改时间      修改原因及内容
	 *
	 * ==================================
	 */
	public static int getRegeditIntValue(String vcName){
		int value = 0;
		try{
			String tmp = getRegeditStringValue(vcName);
			if(StringUtil.isNotBlank(tmp))
				value = Integer.parseInt(tmp);
		}
		catch(Exception e){
			e.printStackTrace();
		}
		return value;
	}

	public static int getRegeditIntValue(String vcName,int defaul){
		int value = defaul;
		try{
			String tmp = getRegeditStringValue(vcName);
			if(StringUtil.isNotBlank(tmp))
				value = Integer.parseInt(tmp);
		}
		catch(Exception e){
			e.printStackTrace();
		}
		return value;
	}

	public static double getRegeditDoubleValue(String vcName){
		int value = 0;
		try{
			String tmp = getRegeditStringValue(vcName);
			if(StringUtil.isNotBlank(tmp))
				value = Integer.parseInt(tmp);
		}
		catch(Exception e){
			e.printStackTrace();
		}
		return value;
	}

	public static double getRegeditDoubleValue(String vcName,double defaul){
		double value = defaul;
		try{
			String tmp = getRegeditStringValue(vcName);
			if(StringUtil.isNotBlank(tmp))
				value = Double.parseDouble(tmp);
		}
		catch(Exception e){
			e.printStackTrace();
		}
		return value;
	}
	
	/**
	 * 开发人： andy
	 * 开发时间： 2013-10-4 下午12:30:53
	 * 功能描述：根据模块名称获取系统字典表的对应值（布尔型）
	 * 方法的参数和返回值
	 * @param vcName
	 * @return
	 * String 
	 * ==================================
	 * 修改历史
	 * 修改人        修改时间      修改原因及内容
	 *
	 * ==================================
	 */
	public static boolean getRegeditBoolValue(String vcName){
		return "true".equals(getRegeditStringValue(vcName));
	}
	
	/**
	 * 开发人： andy
	 * 开发时间： 2013-10-4 下午12:32:59
	 * 功能描述：清除加载到内存中的系统字典表的内容
	 * 方法的参数和返回值
	 * void 
	 * ==================================
	 * 修改历史
	 * 修改人        修改时间      修改原因及内容
	 *
	 * ==================================
	 */
	public static void clearValues(){
		CacheUtil.clearCache(CacheUtil.REGEDIT_CACHE);
	}

}
